gsk: Check for NULL in calls to gsk_cairo_node_get_surface()
authorBenjamin Otte <otte@redhat.com>
Thu, 15 Dec 2016 09:08:46 +0000 (10:08 +0100)
committerBenjamin Otte <otte@redhat.com>
Tue, 20 Dec 2016 17:01:11 +0000 (18:01 +0100)
That function does actually sometimes return NULL and is documented to
do so, so handle that case in the renderers (by omitting the node).

gsk/gskglrenderer.c
gsk/gskvulkanrenderpass.c

index 1c09244b5e24918316c4324b6627c7d72f715c2a..09a63ed874008eaa53365c59400168d09352ea8b 100644 (file)
@@ -713,6 +713,9 @@ gsk_gl_renderer_add_render_item (GskGLRenderer           *self,
         cairo_surface_t *surface = gsk_cairo_node_get_surface (node);
         int gl_min_filter = GL_NEAREST, gl_mag_filter = GL_NEAREST;
 
+        if (surface == NULL)
+          return;
+
         get_gl_scaling_filters (node, &gl_min_filter, &gl_mag_filter);
 
         /* Upload the Cairo surface to a GL texture */
index a2d66c8cf5c6426a4f077ae0694e68577f4aa836..81912dd8be18477282f1757aeb30e333de285e5b 100644 (file)
@@ -100,9 +100,12 @@ gsk_vulkan_render_pass_add_node (GskVulkanRenderPass           *self,
       break;
 
     case GSK_CAIRO_NODE:
-      op.type = GSK_VULKAN_OP_SURFACE;
-      op.render.pipeline = gsk_vulkan_render_get_pipeline (render, GSK_VULKAN_PIPELINE_BLIT);
-      g_array_append_val (self->render_ops, op);
+      if (gsk_cairo_node_get_surface (node) != NULL)
+        {
+          op.type = GSK_VULKAN_OP_SURFACE;
+          op.render.pipeline = gsk_vulkan_render_get_pipeline (render, GSK_VULKAN_PIPELINE_BLIT);
+          g_array_append_val (self->render_ops, op);
+        }
       break;
 
     case GSK_TEXTURE_NODE: